package com.zzvcom.doc.html;



import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



/**
 * 这是一个HTML 文档样式前缀工具类
 * 有这样一种想法，使用docx8.3.14把多个word分别转成html，里面保留<style>标签，
 * 并且好多元素使用class引用了这个style中的定义，有一种想法是把每一个文档按照一个数字字符串，
 * 除了通用的使用方式外比如整个body，html元素的定义除外，
 * 把这些class进行重新命名。目的是为了让各个word转成的html，合并到一起的时候，
 * 并会出现样式冲突。
 */
public class HtmlStyleProcessUtil {
    /**
     * @param doc
     * @param prefix
     * @return
     */
    public static void addStylePrefix(Document doc, String prefix) {
        // 1. 处理所有元素的 class 属性
        Elements allElements = doc.getAllElements();
        for (Element el : allElements) {
            if (el.hasAttr("class")) {
                String classes = el.attr("class");
                String newClasses = prefixClasses(classes, prefix);
                el.attr("class", newClasses);
            }
        }
        // 2. 处理 <style> 标签内的类选择器
        Elements styles = doc.select("style");
        for (Element style : styles) {
            String css = style.html();
           String newCss = SafeCssLinePrefixer.prefixCssClassesPreserveValue(css, prefix);
            style.html(newCss);
        }
    }
    /**
     * 给 class 属性中的每个类名加前缀
     */
    private static String prefixClasses(String classes, String prefix) {
        String[] parts = classes.split("\\s+");
        StringBuilder sb = new StringBuilder();
        for (String part : parts) {
            if (!part.isEmpty()) {
                sb.append(prefix).append(part).append(" ");
            }
        }
        return sb.toString().trim();
    }


}
